<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 设计模式是什么？
    // 设计模式和具体语言无关，是广大开发者在编程实践过程当中总结出来的针对某种应用场景的编程方式。

    // 23种设计模式   17种 单例模式.装饰者模式，工厂模式，。。。。。

    // 订阅和发布模式

    var  center={
      subs:{
        // A:[c1,c2],
        // B:[c3,c4]
      },
      register(type,fn){
        if(!this.subs[type]){
          this.subs[type] = []
        }
        this.subs[type].push(fn)
        return this
      },
      notify(type){
        var events = this.subs[type]
        for(var i=0;i<events.length;i++){
          events[i]()
        }
      }
    }



    var zs = function(){
      console.log('张三订阅 A 户型');
    }
    var ls = function(){
      console.log('李四订阅 B 户型');
    }
    var ww = function(){
      console.log('王五订阅 C 户型');
    }
    var zl = function(){
      console.log('赵六订阅 A 户型');
    }


    center.register('A',zs)
    .register('A',zl)
    .register('B',ls )
    .register('C',ww)



    setTimeout(() => {
      center.notify("A")
      setTimeout(()=>{
        center.notify("B")
        setTimeout(() => {
            center.notify('C')
        }, 3000);
      },3000)
    }, 3000);





  </script>
</body>
</html>